package com.cardone.platform.common.dao;

import java.util.Map;

import com.cardone.context.function.Execution1Function;

/**
 * 实体编号
 *
 * @author yaohaitao
 *
 */
public interface EntityCodeDao {
	/**
	 * sql标识
	 *
	 * @author yaohaitao
	 *
	 */
	public enum SqlIds {
		/**
		 * 插入
		 */
		insertByNotExistsCodeFor,

		/**
		 * 读取
		 */
		readMaxCodeByCodeFor;

		/**
		 * 根目录
		 */
		private static final String ROOT = "/platform/common/entityCode/";

		/**
		 * 标识
		 */
		private final String id;

		/**
		 * sql标识
		 */
		private SqlIds() {
			this.id = SqlIds.ROOT + this.name();
		}

		/**
		 * 获取
		 *
		 * @return sql标识
		 */
		public String id() {
			return this.id;
		}
	}

	/**
	 * 生成代码
	 *
	 * @param id
	 *          标识
	 * @param typeCode
	 *          类别代码
	 * @param function
	 *          方法
	 * @param parameters
	 *          参数
	 * @return 代码
	 */
	String generateCode(final String id, final String typeCode, final Execution1Function<String, String> function, final Map<String, Object> parameters);
}